package org.example.springmvc1;

/**
 * @ResponseBody 既是类注解, ⼜是⽅法注解
 * 如果作⽤在类上, 表⽰该类的所有⽅法, 返回的都是数据, 如果作⽤在⽅法上, 表⽰该⽅法返回的是数据
 */

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller//这里只能使用 @Controller, 不能使用 @RequestController,@RequestController 只能返回数据
//而 @Controller 能返回 html 的文件
//除此之外 @ResponseBody 返回的数据格式为非视图
@RequestMapping("/responseController")
public class responseController {
    @RequestMapping("/returnHtmlPage")
    public String returnHtmlPage(){
        return "/hello.html";
    }

    //除了返回 html 页面, 也可以返回 html 代码片段
    @RequestMapping("/returnHtmlField")
    //若要单独返回某个方法,只需要在改方法钱加上 @
    @ResponseBody
    public String returnHtmlField(){
        return"<h1>hello spring<h1>";
    }

    //返回普通数据
    @ResponseBody
    @RequestMapping("/returnData")
    public String returnData(){
        return "helloSpring";
    }

    //返回 Json 数据
    @ResponseBody
    @RequestMapping("/returnJson")
    public User returnJson(){
        User user = new User();
        user.setName("hx");
        user.setAge(18);
        user.setGender("male");
        return user;
    }

    //设置状态码: 这个返回的状态码是自定义的, 所以页面可以是正确的, 但是状态码是错误的
    //状态码的信息应该从服务器给的响应中获取, 用 HttpServletResponse 来获取
    @ResponseBody
    @RequestMapping("/setStatus")
    public User setStatus(HttpServletResponse response){
        User user = new User();
        user.setName("hx");
        user.setAge(18);
        user.setGender("male");
        response.setStatus(500);
        return user;
        //数据能正常显示, 但是状态码是500
    }

    //设置 Header
    @ResponseBody
    @RequestMapping(path = "/setHeader",produces = "application/Json" )
    public String setHeader(){
        return "{\"success\" true}";
    }

    //设置 Header/cookie
    @ResponseBody
    @RequestMapping("/setHeader2")
    public String setCookie(HttpServletResponse response){
        response.setHeader("My-key","My-value");

        //设置 cookie
        Cookie cookie = new Cookie("key","value");
        response.addCookie(cookie);
        return "success";
    }
}
